Skip to content

feat: serve restore hooks from the instance sidecar - #1025

Open
armru wants to merge 3 commits into
mainfrom
dev/instance-restore-hooks
Open

feat: serve restore hooks from the instance sidecar#1025
armru wants to merge 3 commits into
mainfrom
dev/instance-restore-hooks

Conversation

@armru

@armru armru commented Jul 20, 2026

Copy link
Copy Markdown
Member

CloudNativePG is moving the bootstrap of new instances from dedicated Jobs into the instance pod itself (cloudnative-pg/cloudnative-pg#11228): the restore that used to run in a recovery Job now happens in-process inside the instance pod before PostgreSQL starts. The sidecar shipped in that pod must therefore answer the same Restore RPC the operator sends over the plugin sockets, so the instance mode now registers the restore-job hooks and advertises the restore-job service capability.

A cluster that only bootstraps from an object store, without continued archiving, previously received no sidecar at all in its instance pods; under the new flow that leaves the bootstrap without a plugin socket, both for the Restore RPC and for wal-restore during the recovery replay. The injection condition is widened to match what the plugin configuration already considers valid, so recovery-only clusters get the sidecar too.

@armru
armru requested a review from a team as a code owner July 20, 2026 16:29
@dosubot dosubot Bot added size:M This PR changes 30-99 lines, ignoring generated files. enhancement New feature or request go Pull requests that update go code labels Jul 20, 2026
@mnencia
mnencia force-pushed the dev/instance-restore-hooks branch from 3a0c140 to cfb58a6 Compare July 24, 2026 09:49
@dosubot dosubot Bot added the lgtm This PR has been approved by a maintainer label Jul 24, 2026
@mnencia
mnencia force-pushed the dev/instance-restore-hooks branch from 1bcf222 to 6cd7d39 Compare July 27, 2026 10:35
armru and others added 2 commits July 27, 2026 16:36
The bootstrap that used to run in a dedicated recovery Job now happens
in-process inside the instance pod before PostgreSQL starts, so the sidecar
shipped in that pod must answer the same Restore RPC the operator sends over
the plugin sockets. The instance mode now registers the restore job hooks and
advertises the restore-job service capability so the operator can reach them.
A cluster that only bootstraps from an object store, without continued
archiving, previously received no sidecar in its instance pods; the injection
condition is widened to match what the plugin configuration already considers
valid, so those clusters get the sidecar too.

Signed-off-by: Armando Ruocco <armando.ruocco@enterprisedb.com>
Validate() and the instance sidecar injection condition each
independently re-encoded "is any of BarmanObjectName,
RecoveryBarmanObjectName or ReplicaSourceBarmanObjectName set". The
injection condition had already drifted from Validate() once, missing
RecoveryBarmanObjectName until this PR added it back. Extract a single
HasAnyBarmanObjectStore() method so the two checks can no longer drift
apart the same way again.

Signed-off-by: Marco Nenciarini <marco.nenciarini@enterprisedb.com>
@mnencia
mnencia force-pushed the dev/instance-restore-hooks branch from 6cd7d39 to 4c089ce Compare July 27, 2026 14:38
A cluster bootstrapped only via RecoveryBarmanObjectName, with no
continuing archiving or replica source, only ever needs the sidecar
for its one-time bootstrap restore. Gate its injection on
cluster.IsInitialized() so it stops being added once the cluster is
up.

This makes the operator's own drift-check see the already-running
pod's spec as outdated right after initialization completes, and roll
it out to drop the sidecar. That is deliberately accepted rather than
engineered around: it is one deterministic rollout using the same
machinery the operator already uses for every other pod-spec change
(a switchover if a replica is available, an in-place restart
otherwise), not a new or fragile risk.

Signed-off-by: Marco Nenciarini <marco.nenciarini@enterprisedb.com>
@mnencia
mnencia force-pushed the dev/instance-restore-hooks branch from bb0d217 to e95b91d Compare July 27, 2026 18:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request go Pull requests that update go code lgtm This PR has been approved by a maintainer size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants